const jwt = require('jsonwebtoken');
const {JWT_SECRET} = require('../config/config.default');

const { tokenExpiredError, jsonWebTokenError} = require('../constant/err.type');

// 校验token合法性
const tokenValidator = async (ctx, next) => {
    try {
        let {authorization} = ctx.request.header;
        let token = authorization.replace('Bearer ', '');
        // token解析，user里包含之前的载荷信息
        let tokenInfo = jwt.verify(token, JWT_SECRET);
        ctx.state.user = tokenInfo;
    } catch (e) {
        switch (e.name) {
            case 'TokenExpiredError':
                ctx.app.emit('error', tokenExpiredError, ctx);
                return;
            case 'JsonWebTokenError':
                ctx.app.emit('error', jsonWebTokenError, ctx);
                return;
            default:
                ctx.app.emit('error', jsonWebTokenError, ctx);
                return;

        }
    }
    await next()
};

module.exports = { tokenValidator };